gtk-demo: Fix crash after running popovers demo
authorCarlos Garnacho <carlosg@gnome.org>
Fri, 10 Jan 2014 13:07:44 +0000 (14:07 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Wed, 22 Jan 2014 16:10:06 +0000 (17:10 +0100)
The GtkBuilder window containing the complex popover UI was left
dangling, and with a dangling pointer to its former child, causing
crashes on gtk_grab_notify() after the popover was destroyed.

demos/gtk-demo/popover.c
demos/gtk-demo/popover.ui

index 809fcef7069b38dd88f4722ae7899ea3f49ec49e..4247f57606cd3641fd8ddebef0a759946aeee6a0 100644 (file)
@@ -35,14 +35,17 @@ static GtkWidget *
 create_complex_popover (GtkWidget       *parent,
                         GtkPositionType  pos)
 {
-  GtkWidget *popover, *content;
+  GtkWidget *popover, *window, *content;
   GtkBuilder *builder;
 
   builder = gtk_builder_new ();
   gtk_builder_add_from_resource (builder, "/popover/popover.ui", NULL);
-  content = GTK_WIDGET (gtk_builder_get_object (builder, "box"));
+  window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
+  content = gtk_bin_get_child (GTK_BIN (window));
   g_object_ref (content);
-  gtk_widget_unparent (content);
+  gtk_container_remove (GTK_CONTAINER (gtk_widget_get_parent (content)),
+                        content);
+  gtk_widget_destroy (window);
   g_object_unref (builder);
 
   popover = create_popover (parent, content, GTK_POS_BOTTOM);
index 33fabe669f8646f1eabd9bd098fb791d357231fb..0a70b47d24933e7619b87704a65b3611671f9cef 100644 (file)
@@ -40,7 +40,7 @@
       </row>
     </data>
   </object>
-  <object class="GtkWindow" id="window1">
+  <object class="GtkWindow" id="window">
     <property name="can_focus">False</property>
     <child>
       <object class="GtkBox" id="box">